package veilingDomein;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import veilingService.ServiceProvider;

public class Veiling {
	private int veilingId;

	private Date startDatum;
	private Date sluitDatum;
	private int minimumBedrag;
	private boolean open;
	private String naam, beschrijving;
	private User veiler;
	private int userid;
	private Categorie categorie;
	private ArrayList<Bieding> biedingen;
	private ArrayList<Media> mediaLijst;

	public Veiling(Date startD, Date sluitD, int minB, boolean op, String nm,
			Categorie cat, String besch, int userid, int id) {
		this.startDatum = startD;
		this.sluitDatum = sluitD;
		this.minimumBedrag = minB;
		this.open = op;
		this.naam = nm;
		this.categorie = cat;
		this.beschrijving = besch;
		this.userid = userid;
		biedingen = new ArrayList<Bieding>();
		mediaLijst = new ArrayList<Media>();
		this.veilingId = id;
	}

	public Veiling() {
		// TODO Auto-generated constructor stub
	}

	public ArrayList<Media> getMediaLijst() {
		return mediaLijst;
	}

	public void addMedia(Media media) {
		mediaLijst.add(media);
	}

	public void setNaam(String naam) {
		this.naam = naam;
	}

	public void setBeschrijving(String beschrijving) {
		this.beschrijving = beschrijving;
	}

	public Date getStartDatum() {
		return startDatum;
	}

	public Date getSluitDatum() {
		return sluitDatum;
	}

	public String getFormattedSluitDatum() {
		DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		return dateFormat.format(sluitDatum);
	}

	public int getMinimumBedrag() {
		return minimumBedrag;
	}
	
	public int getAantalBiedingen() {
		int aantal = 0;
		aantal = ServiceProvider.getBiedingService().getAantalBiedingenPerVeiling(this.veilingId);
		return aantal;
	}
	
	public int getHoogsteBieding() {
		int aantal = 0;
		aantal = ServiceProvider.getBiedingService().getHoogsteBiedingPerVeiling(this.veilingId);
		return aantal;
	}

	public boolean getOpen() {
		return open;
	}

	public void setOpen(boolean op) {
		this.open = op;
	}

	public String getNaam() {
		return naam;
	}

	public Categorie getCategorie() {
		return categorie;
	}

	public String getBeschrijving() {
		return beschrijving;
	}

	public User getVeiler() {
		veiler = ServiceProvider.getUserService().getUserByID(userid);
		return veiler;
	}

	public int getVeilingId() {
		return veilingId;
	}

	public void setVeilingId(int veilingId) {
		this.veilingId = veilingId;
	}

	public void addBieding(Bieding bod) throws BiedingException {
		//biedingen = getBiedingen();
		
		
		int hoogsteBod = 0;
		hoogsteBod = ServiceProvider.getBiedingService().getHoogsteBiedingPerVeiling(veilingId);
		if (bod != null) {
			if ((bod.getBedrag() >= minimumBedrag)) {
				if (hoogsteBod != 0) {
					if (bod.getBedrag() <= hoogsteBod) {
						throw new BiedingException(bod.getBedrag(), hoogsteBod);
					} else {
						if ((bod.getUser().getKrediet().getAantal() >= bod
								.getBedrag())) {
							if (bod.getUser().equals(this.getVeiler())) {
								throw new BiedingException(
										"U kunt niet op uw eigen veilingen bieden");
							} else {
								ServiceProvider.getBiedingService().addBieding(
										bod);
							}
						} else {
							throw new BiedingException(
									"U heeft niet genoeg krediet om te bieden");
						}
					}
				} else {
					if ((bod.getUser().getKrediet().getAantal() >= bod
							.getBedrag())) {
						if (bod.getUser().equals(this.getVeiler())) {
							throw new BiedingException(
									"U kunt niet op uw eigen veilingen bieden");
						} else {
							ServiceProvider.getBiedingService().addBieding(bod);
						}
					} else {
						throw new BiedingException(
								"U heeft niet genoeg krediet om te bieden");
					}
				}
			} else {
				throw new BiedingException(
						"Uw bod is lager dan het minimum bedrag voor bieden");
			}
		} else {
			throw new BiedingException("????");
		}
	}

	public ArrayList<Bieding> getBiedingen() {
		System.out.println("Word dit uitgevoerd ?");
		biedingen = ServiceProvider.getBiedingService().heeftBieding(this);
		return biedingen;
	}

	public String toString() {
		String s = "Naam: " + naam + " \n";
		s += "Biedingen: \n";

		for (Bieding b : biedingen) {
			s += "User: " + b.getUser().getUsername() + " Bod: "
					+ b.getBedrag() + " \n";
		}

		return s;
	}
}
